//#pragma once

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<assert.h>
#include<stdbool.h>
#include<unistd.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<time.h>

// 带头+双向+循环链表增删查改实现
char Title[100];//全局变量存放标题
typedef struct Book
{
	int ID;//编号
	char Class[50];//分类
	char BookName[50];//书名
	char Author[30];//作者
	char Publishing[50];//出版社
	int Count;//数量
	float Price;//单价

}ElemType;

typedef struct ListNode//双向带头循环链表
{
	ElemType data;//数据域
	struct ListNode* next;//后继指针
	struct ListNode* prev;//前驱指针

}ListNode;

//读取文件
void ReadFiles(ListNode* pHead);

// 创建并返回头结点地址
ListNode* ListCreate();

//双向链表新节点的申请
ListNode* ListNewNode(ElemType x);

//链表空
bool ListEmpty(ListNode* pHead);

// 双向链表销毁
void ListDestory(ListNode* pHead);

// 双向链表打印
void ListPrint(ListNode* pHead);

// 双向链表查找
ListNode* ListFind(ListNode* pHead, ListNode* pos, char* value);

// 双向链表在pos的前面进行插入
void ListInsert(ListNode* pos, ElemType x);

// 双向链表删除pos位置的节点
void ListErase(ListNode* pos);


void ReadFiles(ListNode* pHead);
void WriteFail(ListNode* pHead);

//查找并输出
void FindOutPut(ListNode* pHead, char* value);

void InsertBook(ListNode* pHead);//插入书籍

void EraseBook(ListNode* pHead);

void ChangeInf(ListNode* pHead);//修改信息-更新

void BookSort(ListNode* pHead);//图书排序